package com.escool.controller;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.escool.model.TbExpediente;
import com.escool.model.TbExpedienteHasMateria;
import com.escool.model.TbInscripcion;
import com.escool.model.TbMatricula;
import com.escool.model.TbPerfilPago;
import com.escool.model.TbSedeHasSeccion;
import com.escool.model.TbSedeSeccionHasMateria;
import com.escool.service.AlumnoService;
import com.escool.service.CatMatriculaService;
import com.escool.service.CatTipoPagoService;
import com.escool.service.ExpedienteService;
import com.escool.service.FindService;
import com.escool.service.InscripcionService;
import com.escool.service.PerfilPagoService;
import com.escool.service.VinSedeSeccionService;

@Controller
public class ExpedienteController {
	@Autowired
	AlumnoService alumnoService;
	@Autowired
	FindService findService;
	
	@Autowired
	VinSedeSeccionService VinSedeSeccionService;
	
	@Autowired
	ExpedienteService expedienteService;
	
	@Autowired
	InscripcionService inscripcionService;
	
	@Autowired
	CatMatriculaService matriculaService;
	
	@Autowired
	PerfilPagoService perfilService;

	@RequestMapping(value = "showExpediente")
	public String listAlumnos(Map<String, Object> map) {
		
		map.put("expediente", new TbExpediente());
		map.put("expedienteList", expedienteService.listAll());
		return "expediente";
	}
	
	@RequestMapping(value = "showInscripcion", method = RequestMethod.POST)
	public String vinAlumnoSeccion(@ModelAttribute("expediente") @Valid TbExpediente expediente,BindingResult result, Map<String, Object> map){
		try{
			TbExpediente tbExpediente = expedienteService.findById(expediente.getIdExpediente());
			TbInscripcion tbInscripcion = new TbInscripcion();
			tbInscripcion.setTbExpediente(tbExpediente);
			System.out.println(tbInscripcion.getTbExpediente());
			map.put("ins", tbInscripcion);
			map.put("TbSedeHasSeccionList", VinSedeSeccionService.listTbSedeHasSeccion());
			map.put("inscripcionList",findService.listVwInscripciones(tbInscripcion.getTbExpediente().getIdExpediente()));
			
		}
		catch(Exception ex){
			ex.printStackTrace();
		}
		return "vinAlumnoSeccion";
	}
	
	@RequestMapping(value = "addInscripcion", method = RequestMethod.POST)
	public String vinAlumnoSeccion(@ModelAttribute("ins") @Valid TbInscripcion inscripcion,BindingResult result){
		if(findService.listVwInscripciones(inscripcion.getTbExpediente().getIdExpediente(), inscripcion.getTbMatricula().getTbPeriodo().getNombrePeriodo()).isEmpty()){
			Date date = new Date();
			SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
			String fechaString = sdf.format(date);
			inscripcion.setFechaInscripcion(fechaString);	
			inscripcion.setStatusInscripcion(1);
			inscripcion.setTbMatricula(matriculaService.findTbMatricula(inscripcion.getTbMatricula().getIdMatricula()));
			inscripcion.setTbPerfilPago(perfilService.findPerfPago(inscripcion.getTbPerfilPago().getIdPerfilPago()));
			inscripcion.setTbSedeHasSeccion(VinSedeSeccionService.findTbSedeHasSeccion(inscripcion.getTbSedeHasSeccion().getIdSedeHasSeccion()));
			inscripcionService.add(inscripcion);
			System.out.println(inscripcion.getTbSedeHasSeccion().getTbSeccion().getNombreSeccion()+
					inscripcion.getTbMatricula().getTbPeriodo().getNombrePeriodo()+
					inscripcion.getTbPerfilPago().getPerfilPago()
					);
			List data = expedienteService.listTbSedeSeccionHasMateria(inscripcion.getTbSedeHasSeccion().getIdSedeHasSeccion());
			if(!data.isEmpty()){
				Iterator it = data.iterator();
				while(it.hasNext()){
					TbSedeSeccionHasMateria dto = (TbSedeSeccionHasMateria)it.next();
					TbExpedienteHasMateria expmp = new TbExpedienteHasMateria();
					expmp.setTbSedeSeccionHasMateria(dto);
					expmp.setTbExpediente(inscripcion.getTbExpediente());
					expmp.setStatus('1');
					expedienteService.addTbExpedienteHasMateria(expmp);
				}
				
			}
		}
		return "redirect:/showExpediente";
	}
	
	
	@RequestMapping(value = "showInscripcion_v2", method = RequestMethod.POST)
	public String showInscripcion_v2(@ModelAttribute("expediente") @Valid TbInscripcion tbInscripcion,BindingResult result, Map<String, Object> map,HttpServletRequest request){
		try{
			String idExpediente = request.getParameter("idExpediente");
			System.out.println(idExpediente);
			TbExpediente tbExpediente = expedienteService.findById(Integer.parseInt(idExpediente));			
			tbInscripcion.setTbExpediente(tbExpediente);
			System.out.println(tbInscripcion.getTbExpediente());
			map.put("ins", tbInscripcion);
			map.put("TbSedeHasSeccionList", VinSedeSeccionService.listTbSedeHasSeccion());
			map.put("inscripcionList",findService.listVwInscripciones(tbInscripcion.getTbExpediente().getIdExpediente()));
			
		}
		catch(Exception ex){
			ex.printStackTrace();
		}
		return "vinAlumnoSeccion";
	}
	
}
